package com.qding.park.manager.service.core.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.qding.park.manager.pojo.ReserveParams;
import com.qding.park.manager.pojo.TbInoutRecord;
import com.qding.park.manager.pojo.TbReserve;
import com.qding.park.manager.pojo.example.HisExample;
import com.qding.park.manager.pojo.example.TbReserveExample;

public interface TbReserveMapper {

	/**
	 * @Description (保存预定单)
	 * @param tbReserve
	 */
	int save(TbReserve tbReserve);
	
	int  reservDel(@Param("orderId")String orderId );
	
	int tempDel(@Param("orderId")String orderId );
	
	int teneratParkHandled(@Param("orderId")String orderId);
	
	int tempParkHandled(@Param("orderId")String orderId);
	
	int reservePayedHandle(TbReserve tbReserve);
	
	int timeout_payed(TbReserve tbReserve);
	
	
	int reserveIssuedFailRollBack(TbReserve tbReserve);
	
	int tempIssuedFailRollBack(TbReserve tbReserve);
	
	/**
	 * @Description (超时进场)
	 * @param tbReserve
	 * @return
	 */
	int timeoutIncheck(TbReserve tbReserve);
	
	/**
	 * @Description (预定按时入场)
	 * @param tbReserve
	 * @return
	 */
	int incheck(TbReserve tbReserve);
	/**
	  * cancelReserves(取消预定)
	  *
	  * @Title: cancelReserves
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int cancelReserves(TbReserve tbReserve);
	
	/**
	  * teneratPaySuccess(代缴支付成功)
	  *
	  * @Title: teneratPaySuccess
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int teneratPaySuccess(TbReserve tbReserve);
	
	int countReserve(@Param("parkId")int parkId,@Param("carNum")String carNum);
	
	/**
	  * tempPaySuccess(临停缴费支付成功)
	  *
	  * @Title: tempPaySuccess
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int tempPaySuccess(TbReserve tbReserve);
	
	/**
	  * reserverPayFail(预定支付失败)
	  *
	  * @Title: reserverPayFail
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int  reserverPayFail( TbReserve tbReserve);
	
	/**
	  * reservePaysuccess(预定单支付成功)
	  *
	  * @Title: reservePaysuccess
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int reservePaysuccess(TbReserve tbReserve);
	
	/**
	  * parkIssued(向车场下发完成之后  ,数据库更新)
	  *
	  * @Title: parkIssued
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int parkIssued(TbReserve tbReserve);

	/**
	 * @Description (查询正在预定的状态)
	 * @return
	 */
	TbReserve queryReserving(@Param("parkId") int parkId, @Param("userId") int userId,
			@Param("reserverType") int reserverType);
	
	
	/**
	  * reserveParams(查询预定参数)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: reserveParams
	  * @Description: TODO
	  * @param @param parkId
	  * @param @return    设定文件
	  * @return ReserveParams    返回类型
	  * @throws
	  */
	ReserveParams reserveParams(@Param("parkId")int parkId);
	
	/**
	  * updateReserveParams(更新预定参数)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: updateReserveParams
	  * @Description: TODO
	  * @param @param params
	  * @param @param parkId
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int updateReserveParams(@Param("params")ReserveParams params,@Param("parkId")int parkId);
	
	
	int tempPayFail(@Param("orderId")String orderId,@Param("status")int status);
	/**
	  * cancelPayment(取消订单)
	  *
	  * @Title: cancelPayment
	  * @Description: TODO
	  * @param @param tbReserve
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int cancelPayment(TbReserve tbReserve);
	    /**
	    * @Title: countByCarnum
	    * @Description: TODO(这里用一句话描述这个方法的作用)
	    * @param @param carNum
	    * @param @return    参数
	    * @return int    返回类型
	    * @throws
	    */
	List<TbReserve> listByCarnum(@Param("carNum") String carNum);
	
	/**
	  * listTempByExample(根据统计条件统计临停缴费单)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: listByExample
	  * @Description: TODO
	  * @param @param example
	  * @param @return    设定文件
	  * @return List<TbReserve>    返回类型
	  * @throws
	  */
	List<TbReserve> listTempByExample(TbReserveExample example);
	
	/**
	 * @param example  统计条件
	 * @return
	 * 根据统计条件查询  预定单列表
	 */
	List<TbReserve> reserveListByExample(TbReserveExample example);

	/**
	 * @Description (通过车场 ，车牌查询 所属的预定)
	 * @param parkId
	 * @param carNum
	 * @return
	 */
	TbReserve queryReservedByParkCarnum(@Param("parkId") int parkId, @Param("carNum") String carNum);

	/**
	 * @Description (根据id 查询预定详情)
	 * @param reserveId
	 * @return
	 */
	TbReserve queryReservesInfoById(@Param("reserveId") String reserveId);

	/**
	 * @Description (根据用户id查询预定列表)
	 * @param userId
	 * @return
	 */
	List<TbReserve> listByUserId(@Param("userId") int userId);
	
	
	/**
	  * listpay( 支付订单列表)
	  *
	  * @Title: listpay
	  * @Description: TODO
	  * @param @param userId
	  * @param @return    设定文件
	  * @return List<TbReserve>    返回类型
	  * @throws
	  */
	List<TbReserve> listpay(@Param("userId") int userId,@Param("time") Date time);
	
	List<TbReserve> listpayByExample(@Param("example") HisExample example,@Param("time") Date time);

	/**
	 * @Description (根据预定编号更新预定单编号)
	 * @param reserveId
	 * @param status
	 * @return
	 */
	int updateStatus(@Param("reserveId") String reserveId, @Param("status") int status);

	/**
	 * @Description (更新预定的 状态和资金流水id)
	 * @param orderId
	 * @param status
	 * @param tradeId
	 * @return
	 */
	int updateStatusTrade(@Param("reserveId") String orderId, @Param("status") int status, @Param("tradeID") String tradeId);

//	/**
//	 * @Description (更新 进场时间，状态，资金流水号)
//	 * @param reserveId
//	 * @param inDateTime
//	 * @param status
//	 * @param feetradeId
//	 * @return
//	 */
//	int updateIntimStatu(@Param("reserveId") String reserveId, @Param("inDateTime") Date inDateTime,
//			@Param("status") int status);

	/**
	 * @Description (更新进场时间状态)
	 * @param reserveId
	 * @param inDateTime
	 * @param status
	 * @return
	 */
	int updateIntimStatu(@Param("reserveId") String reserveId, @Param("inDateTime") Date inDateTime,
			@Param("status") int status);
	
	
	    /**
	    * @Title: reserveOutcheck
	    * @Description: TODO(车辆出场更新 预定单)
	    * @param @param record
	    * @param @return    参数
	    * @return int    返回类型
	    * @throws
	    */
	int reserveOutcheck(TbInoutRecord record);
	
	/**
	 * @Description (预定单超时更新状态)
	 * @param id
	 * @param status
	 * @return
	 */
	int updateStatusTimeout(@Param("id")String id,@Param("status")int status);
}
